package process

import (
	"easy-chat-room/client/utils"
	"easy-chat-room/common/message"
	"encoding/json"
	"fmt"
	"net"
	"os"
)

//显示登陆成功的界面。。。
func ShowMenu() {
	fmt.Println("-----恭喜xxx登陆成功-----")
	fmt.Println("-----1.显示在线用户列表-----")
	fmt.Println("-----2.发送消息-----")
	fmt.Println("-----3.信息列表-----")
	fmt.Println("-----4.退出系统-----")
	fmt.Println("请选择(1-4):")

	var key int
	var content string
	//因为总会使用到smsprocess实例，因此我们将其定义在switch外部
	smsProcess := &SmsProcess{}

	fmt.Scanf("%d\n", &key)
	switch key {
	case 1:
		fmt.Println("显示在线用户列表")
		outputOnlineUser()
	case 2:
		fmt.Println("发送消息")
		//fmt.Scanln(&content)
		fmt.Scanf("%s\n", &content)
		smsProcess.SendGroupMes(content)

	case 3:
		fmt.Println("信息列表")
	case 4:
		fmt.Println("下线了，麻瓜")
		os.Exit(0)
	default:
		fmt.Println("输入错误，你个麻瓜")
	}
}

//和服务器端保持通讯
func serverProcessMes(conn net.Conn) {
	//创建一个transfer实例，不停的读取服务器发送的消息
	tf := &utils.Transfer{
		Conn: conn,
	}
	for {
		fmt.Println("客户端正在读取服务器发送的消息")
		mes, err := tf.ReadPkg()
		if err != nil {
			fmt.Println("tf.ReadPkg() err = ", err)
			return
		}
		//如果读取到消息，继续下一步处理逻辑
		fmt.Printf("mes=%v\n", mes)

		switch mes.Type {
		case message.NotifyUserStatusMesType: //有人上线了
			//1.取出.NotifyUserStatusMes
			var notifyUserStatusMes message.NotifyUserStatusMes
			json.Unmarshal([]byte(mes.Data), &notifyUserStatusMes)
			//2.把这个用户的信息，状态保存到客户端map[int]User中
			updateUserStatus(&notifyUserStatusMes)
		//处理
		case message.SmsMesType: //有人群发消息
			outputGroupMes(&mes)
		default:
			fmt.Println("服务器端返回了一个我无法识别的未知消息类型")
		}

	}
}
